package com.lc1993929.tank.util;

import com.lc1993929.tank.constants.*;
import com.lc1993929.tank.entity.tank.Tank;
import com.lc1993929.tank.entity.vo.TankResult;

import java.util.Random;

/**
 * Created by LiuChang on 2018/11/22.
 */
public class Util {
    private static Random random = new Random();

    public static Integer getRandom(Integer i) {
        return random.nextInt(i);
    }

    public static Direction getRandomDirection() {
        Integer random = getRandom(4);
        Direction direction = Direction.WAIT;
        if (random == 0) {
            direction = Direction.LEFT;
        } else if (random == 1) {
            direction = Direction.RIGHT;
        } else if (random == 2) {
            direction = Direction.UP;
        } else if (random == 3) {
            direction = Direction.DOWN;
        }
        return direction;
    }

    public static TankResult.Type getRandomResultType() {
        Integer random = getRandom(2);
        if (random == 0) {
            return TankResult.Type.MOVE;
        } else if (random == 1) {
            return TankResult.Type.FIRE;
        }
        return TankResult.Type.FIRE;
    }

    public static MapElement mapEnemToMapElement(MapEnum mapEnum) {
        if (mapEnum == MapEnum.M1) {
            return MapElement.WAY;
        } else if (mapEnum == MapEnum.M2) {
            return MapElement.RESURGENCE;
        } else if (mapEnum == MapEnum.M3) {
            return MapElement.MISTY;
        } else if (mapEnum == MapEnum.M4 || mapEnum == MapEnum.M5 || mapEnum == MapEnum.M6 || mapEnum == MapEnum.M7 || mapEnum == MapEnum.M8) {
            return MapElement.BAR;
        } else if (mapEnum == MapEnum.A1) {
            return MapElement.NPC;
        } else if (mapEnum == MapEnum.B1) {
            return "tB".equals(Condition.team) ? MapElement.MY_K2PANTHER : MapElement.ENEMY_K2PANTHER;
        } else if (mapEnum == MapEnum.B2) {
            return "tB".equals(Condition.team) ? MapElement.MY_T90 : MapElement.ENEMY_T90;
        } else if (mapEnum == MapEnum.B3) {
            return "tB".equals(Condition.team) ? MapElement.MY_ARMATA1 : MapElement.ENEMY_ARMATA1;
        } else if (mapEnum == MapEnum.B4) {
            return "tB".equals(Condition.team) ? MapElement.MY_ARMATA2 : MapElement.ENEMY_ARMATA2;
        } else if (mapEnum == MapEnum.B5) {
            return "tB".equals(Condition.team) ? MapElement.MY_WZ123 : MapElement.ENEMY_WZ123;
        } else if (mapEnum == MapEnum.C1) {
            return "tB".equals(Condition.team) ? MapElement.ENEMY_K2PANTHER : MapElement.MY_K2PANTHER;
        } else if (mapEnum == MapEnum.C2) {
            return "tB".equals(Condition.team) ? MapElement.ENEMY_T90 : MapElement.MY_T90;
        } else if (mapEnum == MapEnum.C3) {
            return "tB".equals(Condition.team) ? MapElement.ENEMY_ARMATA1 : MapElement.MY_ARMATA1;
        } else if (mapEnum == MapEnum.C4) {
            return "tB".equals(Condition.team) ? MapElement.ENEMY_ARMATA2 : MapElement.MY_ARMATA2;
        } else if (mapEnum == MapEnum.C5) {
            return "tB".equals(Condition.team) ? MapElement.ENEMY_WZ123 : MapElement.MY_WZ123;
        }
        return null;
    }

    public static TankResult actionToResult(Action action, String tId) {
        TankResult.TankResultBuilder resultBuilder = TankResult.builder().tId(tId).direction(action.getDirection()).length(action.getDistance()).useGlod(action.isUseGlod());
        if (action.getType() == Action.Type.MOVE) {
            resultBuilder.type(TankResult.Type.MOVE);
        } else {
            resultBuilder.type(TankResult.Type.FIRE);
        }
        return resultBuilder.build();
    }


    public static Tank mapElementToTank(MapElement mapElement) {
        if (mapElement == MapElement.ENEMY_ARMATA1) {
            return Condition.enemyArmata1;
        } else if (mapElement == MapElement.ENEMY_ARMATA2) {
            return Condition.enemyArmata2;
        } else if (mapElement == MapElement.ENEMY_T90) {
            return Condition.enemyT90;
        } else if (mapElement == MapElement.ENEMY_K2PANTHER) {
            return Condition.enemyK2Panther;
        } else if (mapElement == MapElement.ENEMY_WZ123) {
            return Condition.enemyWZ123;
        } else {
            return null;
        }
    }

}
